// utils/auth.js - 封装登录逻辑
import {
	ref
} from 'vue'
import {
	loginByWechatCode
} from '@/api/login'
import {
	useUserStore
} from '@/stores/user'
export const userInfo = ref(null)
export const isLoading = ref(false)
// // 检查登录状态
// auth.js
const checkLoginStatus = async () => {
	try {
		// 检查本地是否有 token
		const token = uni.getStorageSync('token');
		if (!token) return false;

		// 如果有 token，尝试获取用户信息
		const userStore = useUserStore();
		try {
			await userStore.fetchUserInfo();
			return true;
		} catch (error) {
			if (error.message.includes('401')) {
				// // 尝试刷新 token
				// const refreshRes = await refreshToken(); // 假设存在 refreshToken 方法
				// if (refreshRes.code === 200) {
				// 	uni.setStorageSync('token', refreshRes.data.token.access_token);
				// 	uni.setStorageSync('refresh_token', refreshRes.data.token.refresh_token);
				// 	// 重新检查登录状态
				// 	return checkLoginStatus();
				// }
			}
			console.error('检查登录状态失败:', error);
			// 清除无效 token
			// uni.removeStorageSync('token');
			// uni.removeStorageSync('refresh_token');
			return false;
		}
	} catch (error) {
		console.error('检查登录状态失败:', error);
		// 清除无效 token
		// uni.removeStorageSync('token');
		// uni.removeStorageSync('refresh_token');
		return false;
	}
}
// utils/auth.js
export const silentLogin = async (userStore) => {
	// const userStore = useUserStore()

	try {
		// 1. 检查现有token是否有效
		const token = uni.getStorageSync('token')
		if (token?.access_token) {
			// 检查token是否即将过期（提前5分钟）
			if (token.expires_at > Date.now() + 300000) {
				return {
					code: 200,
					message: '已登录',
					data: {
						token: {
							access_token: token.access_token,
							refresh_token: token.refresh_token,
							expires_in: Math.floor((token.expires_at - Date.now()) / 1000)
						},
						user: userStore.userInfo
					}
				}
			}

			// 这里可以添加token刷新逻辑
			// const refreshed = await refreshToken()
		}

		// 2. 执行微信静默登录
		const {
			code
		} = await new Promise((resolve, reject) => {
			uni.login({
				provider: 'weixin',
				success: resolve,
				fail: (err) => reject(new Error(`微信登录失败: ${err.errMsg}`))
			})
		})

		const res = await loginByWechatCode({
			js_code: code,
			lang_code: 'zh'
		})

		if (res.code === 200) {
			// 确保数据结构正确
			const userData = res.data.user || {
				user_id: res.data.user_id,
				openid: res.data.openid,
				...res.data // 其他字段
			}

			// 存储token和用户信息
			const tokenData = {
				access_token: res.data.token.access_token,
				refresh_token: res.data.token.refresh_token,
				token_type: res.data.token.token_type,
				expires_at: Date.now() + (res.data.token.expires_in * 1000)
			}

			uni.setStorageSync('token', tokenData)
			userStore.setUserInfo(userData)

			return {
				...res,
				data: {
					...res.data,
					user: userData
				}
			}
		}

		return res
	} catch (error) {
		console.error('静默登录失败:', error)
		// userStore.clearUserInfo()
		return {
			code: 500,
			message: error.message || '登录失败'
		}
	}
}